package test.app.dao;

import java.io.Serializable;
import java.util.List;

import org.hibernate.criterion.Criterion;


/**
 * Generic DAO (Data Access Object) with common methods to CRUD POJOs.
 *<p>Extendiendo esta interface no se necesitan casteos para los DAO's que la implementen
 * domain objects.
  
 */
public interface GenericDao <T, ID extends Serializable> {
		
	/**
	 * Guardo una instancia de un objeto en la base de datos 
	 * @param entity
	 */
	public T save(T object);
	
	/**
	 * Elimino un objeto 
	 * 
	 * @param entity
	 */
	public void remove(ID id);
	
	/**
	 * @param id el identificador del objeto que queremos obtener
	 * @return
	 */
	public T findById(ID id);
	
	/**
	 * Guarda los cambios echos a un objeto persistente
	 * @param entity
	 */
	public void update(T transientObject);
	
	/**
	* Metodo generico usado para obtener una lista de un Tipo en Particular
	* @return lista del objeto
	*/
	
	public List<T>	getAll();
	
	public List<T> findByCriteria(Criterion... criterion); 

}
